package map;

import java.security.Key;
import java.util.*;

public class MapTest01 {
    /*
    java.util接口Map<K,V>
    类型参数:K-表示此映射所维护的键       V-表示此映射所维护的对应的值
    也叫做哈希表，散列表。常用与键值对结构的数据。其中键不能重复，值可以重复
    1.Map可以根据键来提取对应的值
    2.Map的键不允许重复，如果重复，对应的值会被覆盖
    3.Map存放的都是无序的数据
    4.Map的初始容量为16，默认的加载因子是0.75
    */
    public static void main(String[] args) {
        //1创建Map对象
        //map中的数据要符合映射规则，一定要同时指定K和V的类型（看你具体的需求）
        Map<Integer,String> map=new HashMap<>();

        //2向map中添加数据
        map.put(9527,"老王");
        map.put(9528,"老董");
        map.put(9529,"老蔡");
        map.put(9530,"老杨");

        System.out.println(map);
        map.put(9529,"小蔡");
        System.out.println(map);

        //3测试常用方法
//        map.clear();//清空map集合

        map.containsKey(9527);//判断Map中是否还有指定的键
        map.containsValue("老蔡");//判断Map中是否含有指定的值

        String remove = map.remove(9528);//根据键删除对应的值，删除成功后返回被删除的值
        System.out.println(remove);
        String s = map.get(9528);//根据指定的键获取对应的值，没有则返回null
        System.out.println(s);

        Collection<String> v = map.values();//把map中所有的值存放在collection中
        System.out.println(v);

        /*对Map集合进行迭代*/
        //方式1:将map集合转换成set集合
        /*Set<K>keySet():把map集合中的所有K存在set集合中*/
        Set<Integer> keySet= map.keySet();
        /*遍历set集合获取此集合对应的迭代器*/
        Iterator<Integer> it=keySet.iterator();
        while (it.hasNext()){
            Integer key= it.next();
            String value=map.get(key);
            System.out.println(key+"="+value);
        }

        //方式2:将map集合转换成set集合
        /*Set<Entry<Integer,String>> entrySet():把map集合每一组kv整体存放在Entry中一个元素中*/
        Set<Map.Entry<Integer, String>> entrySet = map.entrySet();
        Iterator<Map.Entry<Integer, String>> it2 = entrySet.iterator();
        while (it2.hasNext()){
            Map.Entry<Integer, String> entry = it2.next();
            Integer key= entry.getKey();
            String value=entry.getValue();
            System.out.println(key+"="+value);
        }



    }
}
